子类化 numpy.ndarray 是一种高层次的架构决策,用于创建领域特定的数据结构,以封装 元数据 (如单位、坐标或采样率)以及原始数值数据。与标准 Python 类不同,NumPy 对象通常在不调用 __init__的情况下创建。
初始化三路径
架构师必须考虑三种不同的实例化路径,这些路径会绕过标准构造函数:
- 显式构造: 使用类名(由
__new__处理)。 - 视图转换: 将现有数组重新解释为你的子类。
- 基于模板新建: 创建现有子类实例的切片或副本。
专门的 __array_finalize__ 钩子是这些路径中元数据同步的汇聚点。
行为脆弱性
子类化与 NumPy C-API 形成紧密耦合。返回标量的操作(例如, np.mean())通常会 “剥离” 子类身份,恢复为标准的 ndarray。因此,除非通过状态转换仔细处理,否则元数据管理始终存在风险。
专家洞察
只有当你的对象必须作为库所期望的 `isinstance(obj, np.ndarray)` 的即插即用替代品时,子类化才是必需的。
isinstance(obj, np.ndarray)否则, 组合 (包装一个数组)更安全。TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>